//类和对象的区别就是类可以隔离作用域
//这个文件用来写通用的工具
class MUtil {
    request(param) {
        return new Promise((resolve, reject) => {
            let that = this;

            $.ajax({
                type: param.type || 'get',//没有的话就是get
                url: param.url || '',//没有的话就是 ''
                dataType: param.dataType || 'json',//没有的话就是 'json'
                data: param.data || null,
                success(res) {
                    if (0 === res.status) {
                        typeof resolve === 'function' && resolve(res.data, res.msg);
                    }
                    else if (10 === res.status) {
                        that.doLogin();
                    }
                    else {
                        typeof reject === 'function' && reject(res.msg || res.data);
                    }
                },
                error(err) {
                    typeof reject === 'function' && reject(err.statusText);
                }
            })
        });
    }
    //跳转登录
    doLogin() {
        window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
    }

    getUrlParam(name) {
        //||的意思是取不到，则queryString为空字符串
        //window.location.search取到类似 ?param1=123&param2=456这样的问号后面的字符串
        //因为查询字符串window.location.search.split返回的第一个参数是问号
        //所以window.location.search.split('?')[1]取值成功则进行赋值操作，否则赋值为　''
        //split(separator, howmany) 是字符串的方法，返回分割后的数组,howmany指定返回数组的长度
        let queryString = window.location.search.split('?')[1] || '',
            reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'),
            result = queryString.match(reg);
        //"param1=123&param2=456".match(new RegExp('(^|&)param1=([^&]*)(&|$)'))
        //输出： ["param1=123&", "", "123", "&", index: 0, input: "param1=123&param2=456", groups: undefined]

        //"param1=123&param2=456".match(new RegExp('(^|&)param2=([^&]*)(&|$)'))
        //["&param2=456", "&", "456", "", index: 10, input: "param1=123&param2=456", groups: undefined]
        return result ? decodeURIComponent(result[2]) : null//所以第三个元素是它的返回值


    }
    //成功提示
    successTips(successMsg) {
        alert(successMsg || '操作成功！');
    }
    //错误提示
    errorTips(errMsg) {
        alert(errMsg || '好像哪里不对了')
    }
    //存储
    setStorage(name, data) {
        let dataType = typeof data;
        //JSON对象
        if (dataType === 'object') {
            window.localStorage.setItem(name, JSON.stringify(data));//字符串化
        }
        //基础类型
        else if (['number', 'string', 'boolean'].indexOf(dataType) >= 0) {
            window.localStorage.setItem(name, data);//则直接存储
        }
        else {
            alert('该类型不能用于本地存储')
        }
    }
    //取出存储内容
    getStorage(name) {
        let data = window.localStorage.getItem(name);
        if (data) {
            return JSON.parse(data);
        }
        else {
            return '';
        }
    }
    //删除本地存储
    removeStorage(name) {
        window.localStorage.removeItem(name);
    }
}

export default MUtil;